package com.jeff.cloud.consumermovie.feign;

import com.jeff.cloud.consumermovie.bean.User;
import org.omg.CORBA.Request;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import java.lang.annotation.Annotation;

/**
 * 1、本例中使用了eureka,Ribbon会把"microservice-provider-user"解析成Eureka服务注册表中的服务。
 * 如果不想使用eureka，可以yml使用service.ribbon.listOfServers属性配置服务器列表.
 * 结果看来，不但实现了声明式的RestApi调用，同时还实现了客户端侧的负载均衡。
 * 2021/8/10 17:10
 * Feign的fallback测试
 * 使用@FeignClient的fallback属性指定回退类
 * @author: jeff
 * @date: 2021/8/9 14:36
 */
@FeignClient(name="microservice-provider-user",fallback = FeignClientFallback.class)
public interface UserFeignClient {
    @RequestMapping(value="/{id}",method = RequestMethod.GET)
    public User findById(@PathVariable("id") Long id);
}
/*
 * 回退类FeignClientFallback需要实现Feign Client接口
 * FeignClientFallback也可以是public class，没有区别
 * @return:
 * @author: jeff
 * @date: 2021/8/10 17:12
 */
@Component
class FeignClientFallback implements UserFeignClient{

    @Override
    public User findById(Long id){
        User user = new User();
        user.setId(id<0?id:-1);
        user.setUsername("默认用户");
        return user;
    }
}